home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / telecomm / terms / term-4.1-source.lha / Extras / Source / term-Source.lha / HotkeyPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-31  |  7.7 KB  |  342 lines

  1. /*
  2. **    HotkeyPanel.c
  3. **
  4. **    Editing panel for hotkey configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_TERMTOFRONT=1,GAD_BUFFERTOFRONT,GAD_SKIPDIAL,GAD_ABORTAREXX,
  13.         GAD_PRIORITY,GAD_HOTKEYS,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL
  14.     };
  15.  
  16. STATIC BOOLEAN __regargs
  17. GoodCode(STRPTR Code)
  18. {
  19.     IX Expression;
  20.  
  21.     return((BOOLEAN)(ParseIX(Code,&Expression) == 0));
  22. }
  23.  
  24. BYTE __regargs
  25. HotkeyPanel(struct Hotkeys *Hotkeys)
  26. {
  27.     struct LayoutHandle    *Handle;
  28.     struct Hotkeys         PrivateHotkeys;
  29.     ULONG             OldCRC;
  30.  
  31.     OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  32.  
  33.     CopyMem(Hotkeys,&PrivateHotkeys,sizeof(struct Hotkeys));
  34.  
  35.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  36.         LH_LocaleHook,    &LocaleHook,
  37.     TAG_DONE))
  38.     {
  39.         struct Window *PanelWindow;
  40.  
  41.         LT_New(Handle,
  42.             LA_Type,    VERTICAL_KIND,
  43.         TAG_DONE);
  44.         {
  45.             LT_New(Handle,
  46.                 LA_Type,    VERTICAL_KIND,
  47.                 LA_LabelID,    MSG_V36_0083,
  48.             TAG_DONE);
  49.             {
  50.                 LT_New(Handle,
  51.                     LA_Type,    STRING_KIND,
  52.                     LA_LabelID,    MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD,
  53.                     LA_STRPTR,    Hotkeys -> termScreenToFront,
  54.                     LA_Chars,    30,
  55.                     GTST_MaxChars,    255,
  56.                     LA_ID,        GAD_TERMTOFRONT,
  57.                 TAG_DONE);
  58.  
  59.                 LT_New(Handle,
  60.                     LA_Type,    STRING_KIND,
  61.                     LA_LabelID,    MSG_HOTKEYPANEL_BUFFER_SCREEN_TO_FRONT_GAD,
  62.                     LA_STRPTR,    Hotkeys -> BufferScreenToFront,
  63.                     GTST_MaxChars,    255,
  64.                     LA_ID,        GAD_BUFFERTOFRONT,
  65.                 TAG_DONE);
  66.  
  67.                 LT_New(Handle,
  68.                     LA_Type,    STRING_KIND,
  69.                     LA_LabelID,    MSG_HOTKEYPANEL_SKIP_DIAL_ENTRY_GAD,
  70.                     LA_STRPTR,    Hotkeys -> SkipDialEntry,
  71.                     GTST_MaxChars,    255,
  72.                     LA_ID,        GAD_SKIPDIAL,
  73.                 TAG_DONE);
  74.  
  75.                 LT_New(Handle,
  76.                     LA_Type,    STRING_KIND,
  77.                     LA_LabelID,    MSG_HOTKEYPANEL_ABORT_AREXX_GAD,
  78.                     LA_STRPTR,    Hotkeys -> AbortARexx,
  79.                     GTST_MaxChars,    255,
  80.                     LA_ID,        GAD_ABORTAREXX,
  81.                 TAG_DONE);
  82.  
  83.                 LT_EndGroup(Handle);
  84.             }
  85.  
  86.             LT_New(Handle,
  87.                 LA_Type,        VERTICAL_KIND,
  88.                 LA_LabelID,        MSG_V36_0084,
  89.             TAG_DONE);
  90.             {
  91.                 LT_New(Handle,
  92.                     LA_Type,        SLIDER_KIND,
  93.                     LA_LabelID,        MSG_HOTKEYPANEL_COMMODITY_PRIORITY_GAD,
  94.                     LA_BYTE,        &Hotkeys -> CommodityPriority,
  95.                     GTSL_Min,        -128,
  96.                     GTSL_Max,        127,
  97.                     GTSL_LevelFormat,    "%4ld",
  98.                     LA_Chars,        16,
  99.                     LA_ID,            GAD_PRIORITY,
  100.                 TAG_DONE);
  101.  
  102.                 LT_New(Handle,
  103.                     LA_Type,    CHECKBOX_KIND,
  104.                     LA_LabelID,    MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD,
  105.                     LA_BYTE,    &Hotkeys -> HotkeysEnabled,
  106.                     LA_ID,        GAD_HOTKEYS,
  107.                 TAG_DONE);
  108.  
  109.                 LT_EndGroup(Handle);
  110.             }
  111.  
  112.             LT_New(Handle,
  113.                 LA_Type,VERTICAL_KIND,
  114.             TAG_DONE);
  115.             {
  116.                 LT_New(Handle,
  117.                     LA_Type,    XBAR_KIND,
  118.                     LAXB_FullSize,    TRUE,
  119.                 TAG_DONE);
  120.  
  121.                 LT_EndGroup(Handle);
  122.             }
  123.  
  124.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  125.                 LAGR_SameSize,    TRUE,
  126.                 LAGR_Spread,    TRUE,
  127.             TAG_DONE);
  128.             {
  129.                 LT_New(Handle,
  130.                     LA_Type,    BUTTON_KIND,
  131.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  132.                     LA_ID,        GAD_USE,
  133.                     LABT_ReturnKey,    TRUE,
  134.                     LABT_ExtraFat,    TRUE,
  135.                 TAG_DONE);
  136.  
  137.                 LT_New(Handle,
  138.                     LA_Type,    BUTTON_KIND,
  139.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  140.                     LA_ID,        GAD_LOAD,
  141.                     LABT_ExtraFat,    TRUE,
  142.                 TAG_DONE);
  143.  
  144.                 LT_New(Handle,
  145.                     LA_Type,    BUTTON_KIND,
  146.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  147.                     LA_ID,        GAD_SAVE,
  148.                     LABT_ExtraFat,    TRUE,
  149.                 TAG_DONE);
  150.  
  151.                 LT_New(Handle,
  152.                     LA_Type,    BUTTON_KIND,
  153.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  154.                     LA_ID,        GAD_CANCEL,
  155.                     LABT_EscKey,    TRUE,
  156.                     LABT_ExtraFat,    TRUE,
  157.                 TAG_DONE);
  158.  
  159.                 LT_EndGroup(Handle);
  160.             }
  161.  
  162.             LT_EndGroup(Handle);
  163.         }
  164.  
  165.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_HOTKEYPANEL_HOTKEY_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  166.             LAWN_HelpHook,        &GuideHook,
  167.             LAWN_Parent,        Window,
  168.             WA_DepthGadget,        TRUE,
  169.             WA_CloseGadget,        TRUE,
  170.             WA_DragBar,        TRUE,
  171.             WA_RMBTrap,        TRUE,
  172.             WA_Activate,        TRUE,
  173.         TAG_DONE))
  174.         {
  175.             struct IntuiMessage    *Message;
  176.             BOOLEAN             Done = FALSE;
  177.             ULONG             MsgClass,
  178.                          MsgQualifier;
  179.             UWORD             MsgCode;
  180.             struct Gadget        *MsgGadget;
  181.  
  182.             struct FileRequester    *FileRequest;
  183.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  184.                         *DummyChar;
  185.  
  186.             STRPTR             String;
  187.  
  188.             GuideContext(CONTEXT_HOTKEYS);
  189.  
  190.             PushWindow(PanelWindow);
  191.  
  192.             do
  193.             {
  194.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  195.                 {
  196.                     CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  197.  
  198.                     break;
  199.                 }
  200.  
  201.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  202.                 {
  203.                     MsgClass    = Message -> Class;
  204.                     MsgQualifier    = Message -> Qualifier;
  205.                     MsgCode        = Message -> Code;
  206.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  207.  
  208.                     GT_ReplyIMsg(Message);
  209.  
  210.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  211.  
  212.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  213.                     {
  214.                         CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  215.  
  216.                         Done = TRUE;
  217.                     }
  218.  
  219.                     if(MsgClass == IDCMP_GADGETUP)
  220.                     {
  221.                         switch(MsgGadget -> GadgetID)
  222.                         {
  223.                             case GAD_TERMTOFRONT:
  224.                             case GAD_BUFFERTOFRONT:
  225.                             case GAD_SKIPDIAL:
  226.                             case GAD_ABORTAREXX:
  227.  
  228.                                 String = LT_GetString(Handle,MsgGadget -> GadgetID);
  229.  
  230.                                 if(!GoodCode(String))
  231.                                 {
  232.                                     DisplayBeep(PanelWindow -> WScreen);
  233.  
  234.                                     LT_Activate(Handle,MsgGadget -> GadgetID);
  235.                                 }
  236.  
  237.                                 break;
  238.  
  239.                             case GAD_USE:
  240.  
  241.                                 Done = TRUE;
  242.                                 break;
  243.  
  244.                             case GAD_CANCEL:
  245.  
  246.                                 CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  247.  
  248.                                 Done = TRUE;
  249.                                 break;
  250.  
  251.                             case GAD_LOAD:
  252.  
  253.                                 SplitFileName(LastKeys,&DummyChar,DummyBuffer);
  254.  
  255.                                 LT_LockWindow(PanelWindow);
  256.  
  257.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_HOTKEYPANEL_LOAD_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  258.                                 {
  259.                                     if(!LoadHotkeys(DummyBuffer,Hotkeys))
  260.                                         ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  261.                                     else
  262.                                     {
  263.                                         strcpy(LastKeys,DummyBuffer);
  264.  
  265.                                         LT_SetAttributes(Handle,GAD_TERMTOFRONT,
  266.                                             GTST_String,Hotkeys -> termScreenToFront,
  267.                                         TAG_DONE);
  268.  
  269.                                         LT_SetAttributes(Handle,GAD_BUFFERTOFRONT,
  270.                                             GTST_String,Hotkeys -> BufferScreenToFront,
  271.                                         TAG_DONE);
  272.  
  273.                                         LT_SetAttributes(Handle,GAD_SKIPDIAL,
  274.                                             GTST_String,Hotkeys -> SkipDialEntry,
  275.                                         TAG_DONE);
  276.  
  277.                                         LT_SetAttributes(Handle,GAD_ABORTAREXX,
  278.                                             GTST_String,Hotkeys -> AbortARexx,
  279.                                         TAG_DONE);
  280.  
  281.                                         LT_SetAttributes(Handle,GAD_PRIORITY,
  282.                                             GTSL_Level,Hotkeys -> CommodityPriority,
  283.                                         TAG_DONE);
  284.  
  285.                                         LT_SetAttributes(Handle,GAD_HOTKEYS,
  286.                                             GTCB_Checked,Hotkeys -> HotkeysEnabled,
  287.                                         TAG_DONE);
  288.  
  289.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  290.  
  291.                                         HotkeysChanged = FALSE;
  292.                                     }
  293.  
  294.                                     FreeAslRequest(FileRequest);
  295.                                 }
  296.  
  297.                                 LT_UnlockWindow(PanelWindow);
  298.  
  299.                                 break;
  300.  
  301.                             case GAD_SAVE:
  302.  
  303.                                 SplitFileName(LastKeys,&DummyChar,DummyBuffer);
  304.  
  305.                                 LT_LockWindow(PanelWindow);
  306.  
  307.                                 if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_HOTKEYPANEL_SAVE_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  308.                                 {
  309.                                     if(!WriteIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),ID_HOTK))
  310.                                         ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  311.                                     else
  312.                                     {
  313.                                         strcpy(LastKeys,DummyBuffer);
  314.  
  315.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  316.  
  317.                                         HotkeysChanged = FALSE;
  318.                                     }
  319.  
  320.                                     FreeAslRequest(FileRequest);
  321.                                 }
  322.  
  323.                                 LT_UnlockWindow(PanelWindow);
  324.  
  325.                                 break;
  326.                         }
  327.                     }
  328.                 }
  329.             }
  330.             while(!Done);
  331.  
  332.             PopWindow();
  333.         }
  334.  
  335.         LT_DeleteHandle(Handle);
  336.     }
  337.  
  338.     HotkeysChanged |= (OldCRC != DoCRC(Hotkeys,sizeof(struct Hotkeys)));
  339.  
  340.     return((BYTE)memcmp(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys)));
  341. }
  342.